/*
 * Copyright (c) 1993-1997, Silicon Graphics, Inc.
 * ALL RIGHTS RESERVED
 * Permission to use, copy, modify, and distribute this software for
 * any purpose and without fee is hereby granted, provided that the above
 * copyright notice appear in all copies and that both the copyright notice
 * and this permission notice appear in supporting documentation, and that
 * the name of Silicon Graphics, Inc. not be used in advertising
 * or publicity pertaining to distribution of the software without specific,
 * written prior permission.
 *
 * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
 * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
 * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
 * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
 * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
 * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
 * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
 * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
 * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
 * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 * US Government Users Restricted Rights
 * Use, duplication, or disclosure by the Government is subject to
 * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
 * (c)(1)(ii) of the Rights in Technical Data and Computer Software
 * clause at DFARS 252.227-7013 and/or in similar or successor
 * clauses in the FAR or the DOD or NASA FAR Supplement.
 * Unpublished-- rights reserved under the copyright laws of the
 * United States.  Contractor/manufacturer is Silicon Graphics,
 * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
 *
 * OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
 */
package cglesson.lesson01;

import java.nio.ByteBuffer;

import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;

import cglesson.CGExample;

/**
 *  This program demonstrates polygon stippling.
 *  Ported By
 *  @author <a href="mailto:eriq.adams@gmail.com">Eriq Muhammad Adams J.</a>
 */
public class Polys extends CGExample {

	@Override
	public void init() {
		GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
		GL11.glShadeModel(GL11.GL_FLAT);
		GL11.glViewport(0, 0, width, height);
		GL11.glMatrixMode(GL11.GL_PROJECTION);
		GL11.glLoadIdentity();
		GLU.gluOrtho2D(0.0f, (float) width, 0.0f, (float) height);
	}

	@Override
	public void update(int delta) {

	}

	@Override
	public void render() {
		byte[] fly = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
				(byte) 0x80, 0x01, (byte) 0xC0, 0x06, (byte) 0xC0, 0x03, 0x60,
				0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20, 0x04, 0x18,
				0x18, 0x20, 0x04, 0x0C, 0x30, 0x20, 0x04, 0x06, 0x60, 0x20,
				0x44, 0x03, (byte) 0xC0, 0x22, 0x44, 0x01, (byte) 0x80, 0x22,
				0x44, 0x01, (byte) 0x80, 0x22, 0x44, 0x01, (byte) 0x80, 0x22,
				0x44, 0x01, (byte) 0x80, 0x22, 0x44, 0x01, (byte) 0x80, 0x22,
				0x44, 0x01, (byte) 0x80, 0x22, 0x66, 0x01, (byte) 0x80, 0x66,
				0x33, 0x01, (byte) 0x80, (byte) 0xCC, 0x19, (byte) 0x81,
				(byte) 0x81, (byte) 0x98, 0x0C, (byte) 0xC1, (byte) 0x83, 0x30,
				0x07, (byte) 0xe1, (byte) 0x87, (byte) 0xe0, 0x03, 0x3f,
				(byte) 0xfc, (byte) 0xc0, 0x03, 0x31, (byte) 0x8c, (byte) 0xc0,
				0x03, 0x33, (byte) 0xcc, (byte) 0xc0, 0x06, 0x64, 0x26, 0x60,
				0x0c, (byte) 0xcc, 0x33, 0x30, 0x18, (byte) 0xcc, 0x33, 0x18,
				0x10, (byte) 0xc4, 0x23, 0x08, 0x10, 0x63, (byte) 0xC6, 0x08,
				0x10, 0x30, 0x0c, 0x08, 0x10, 0x18, 0x18, 0x08, 0x10, 0x00,
				0x00, 0x08 };

		byte[] halftone = { (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA,
				0x55, 0x55, 0x55, 0x55, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA,
				(byte) 0xAA, 0x55, 0x55, 0x55, 0x55, (byte) 0xAA, (byte) 0xAA,
				(byte) 0xAA, (byte) 0xAA, 0x55, 0x55, 0x55, 0x55, (byte) 0xAA,
				(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, 0x55, 0x55, 0x55, 0x55,
				(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, 0x55, 0x55,
				0x55, 0x55, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA,
				0x55, 0x55, 0x55, 0x55, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA,
				(byte) 0xAA, 0x55, 0x55, 0x55, 0x55, (byte) 0xAA, (byte) 0xAA,
				(byte) 0xAA, (byte) 0xAA, 0x55, 0x55, 0x55, 0x55, (byte) 0xAA,
				(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, 0x55, 0x55, 0x55, 0x55,
				(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, 0x55, 0x55,
				0x55, 0x55, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA,
				0x55, 0x55, 0x55, 0x55, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA,
				(byte) 0xAA, 0x55, 0x55, 0x55, 0x55, (byte) 0xAA, (byte) 0xAA,
				(byte) 0xAA, (byte) 0xAA, 0x55, 0x55, 0x55, 0x55, (byte) 0xAA,
				(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, 0x55, 0x55, 0x55, 0x55,
				(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, 0x55, 0x55,
				0x55, 0x55, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA,
				0x55, 0x55, 0x55, 0x55 };

		GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
		GL11.glColor3f(1.0f, 1.0f, 1.0f);

		/* draw one solid, unstippled rectangle, */
		/* then two stippled rectangles */
		GL11.glRectf(25.0f, 25.0f, 125.0f, 125.0f);
		GL11.glEnable(GL11.GL_POLYGON_STIPPLE);
		ByteBuffer flyBuff = ByteBuffer.allocateDirect(fly.length);
		flyBuff.put(fly);
		flyBuff.flip();
		GL11.glPolygonStipple(flyBuff);
		GL11.glRectf(125.0f, 25.0f, 225.0f, 125.0f);
		ByteBuffer halftoneBuff = ByteBuffer.allocateDirect(halftone.length);
		halftoneBuff.put(halftone);
		halftoneBuff.flip();
		GL11.glPolygonStipple(halftoneBuff);
		GL11.glRectf(225.0f, 25.0f, 325.0f, 125.0f);
		GL11.glDisable(GL11.GL_POLYGON_STIPPLE);
		GL11.glFlush();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Polys example = new Polys();
		example.start(350, 150, false, "Polygon Example");
	}

}
